package com.wyb.hzmt.static_baseFrame_tools0.tools;

import android.content.Context;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
import java.math.BigDecimal;
import java.util.Random;
import java.util.regex.Pattern;

/**
 * Created by Shinelon on 2017/3/9.
 *
 * 共7个方法
 * 1、字符串判空方法组，方法数为1
 * 2、四舍五入方法组，方法数为1
 * 3、邮件判断方法组，方法数为1
 * 4、手机号判断方法组，方法数为1
 * 5、获取随机数方法组，方法数为1
 * 6、控件旋转方法组，方法数为1
 * 7、获取设备号方法组，方法数为1
 */

public class PublicTools {
    /***
     * 邮箱正则
     */
    private final static Pattern emailer = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
    /***
     * 手机号正则
     */
    private final static Pattern mobile = Pattern.compile("^(13|14|15|17|18)[0-9]{9}$");


    /**
     * 1、字符串判空方法组，方法数为1
     * 判断给定字符串是否空白串。 空白串是指由空格、制表符、回车符、换行符组成的字符串
     * 若无值，若输入字符串为"null" 或空字符串，返回true
     *
     * @param input 字符串
     * @return boolean  是否为空
     */
    public static boolean isEmpty(String input) {
        if (input == null || input.equals("null") || "".equals(input))
            return true;

        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
                return false;
            }
        }
        return true;
    }

    /**
     *
     * 2、四舍五入方法组，方法数为1
     * 输入一个小数 进行四舍五入，并保留指定位数。
     *
     * @param value String类型数字
     * @param newScale 保留几位小数
     */
    public static String BigDecimalDouble(String value, int newScale) {
        if (isEmpty ( value )) {
            return "0.00";
        }
        BigDecimal mData = new BigDecimal( value ).setScale ( newScale,
                BigDecimal.ROUND_HALF_UP );
        return mData.toString ();
    }

    /**
     *
     * 3、邮件账号判断方法组，方法数为1
     * 判断是不是一个合法的电子邮件地址
     *
     * @param email email地址
     * @return boolean 是否合法
     */
    public static boolean isEmail(String email) {
        if (email == null || email.trim().length() == 0)
            return false;
        return emailer.matcher(email).matches();
    }

    /**
     *
     * 4、手机号判断方法组，方法数为1
     * 判断手机号是否合法
     *
     * @param mobiles 手机号
     * @return  boolean 是否合法
     */
    public static boolean isMobileNO(String mobiles) {
        return mobile.matcher(mobiles).matches();
    }



    /**
     *
     * 5、获取随机数方法组，方法数为1
     * 获取六位随机数
     *
     * @return
     */
    public static String getCode() {
        String mCode = "";
//        Random random = new Random();//同一个程序只会获取同一个随机数
        Random random = new Random(System.nanoTime());//System.nanoTime()仅仅作为获取随机数的种子；连续的System.currentTimeMillis()变化太小，可能使获取的随机数不变
        for (int i = 0; i < 6; i++) {
            mCode += random.nextInt(10);
        }
        return mCode;
    }

    /**
     *
     * 6、控件动画方法组，共4个方法
     *
     * view点击展开的旋转动画
     * @param v 传入view
     * @param durationMillis 动画时长
     */
    public static void rotateOpen(final View v, long durationMillis) {

        AnimationSet animationSet = new AnimationSet(true);
        /**
         *
         * 参数1：从哪个旋转角度开始
         * 参数2：转到什么角度
         * 后4个参数用于设置围绕着旋转的圆的圆心在哪里
         * 参数3：确定x轴坐标的类型，有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标
         * 参数4：x轴的值，0.5f表明是以自身这个控件的一半长度为x轴
         * 参数5：确定y轴坐标的类型
         * 参数6：y轴的值，0.5f表明是以自身这个控件的一半长度为x轴
         */
        RotateAnimation animation = new RotateAnimation(0f, 180f, Animation.RELATIVE_TO_SELF,
                0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        animation.setDuration(durationMillis);//设置动画持续时间
        /** 常用方法 */
        animation.setRepeatCount(0);//设置重复次数
        //animation.setStartOffset(long startOffset);//执行前的等待时间
        animation.setFillAfter(true);//动画执行完后是否停留在执行完的状态
        animationSet.addAnimation(animation);
        animationSet.setFillAfter(true);
        animationSet.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }
            @Override
            public void onAnimationEnd(Animation animation) {
                // v.clearAnimation();
                // v.setRotation(180f);
            }
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });
        // v.setAnimation(animation);
        // animation.startNow();
        v.startAnimation(animationSet);
    }

    /***
     *
     * view的点击关闭旋转动画
     * @param v 传入view
     * @param durationMillis 动画时长
     */
    public static void rotateClose(final View v, long durationMillis) {
        //
        AnimationSet animationSet = new AnimationSet(true);
        //参数1：从哪个旋转角度开始
        //参数2：转到什么角度
        //后4个参数用于设置围绕着旋转的圆的圆心在哪里
        //参数3：确定x轴坐标的类型，有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标
        //参数4：x轴的值，0.5f表明是以自身这个控件的一半长度为x轴
        //参数5：确定y轴坐标的类型
        //参数6：y轴的值，0.5f表明是以自身这个控件的一半长度为x轴
        RotateAnimation animation = new RotateAnimation(180f, 360f, Animation.RELATIVE_TO_SELF,
                0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        animation.setDuration(durationMillis);//设置动画持续时间

        animation.setRepeatCount(0);//设置重复次数
        //animation.setStartOffset(long startOffset);//执行前的等待时间
        animation.setFillAfter(true);//动画执行完后是否停留在执行完的状态
        animationSet.addAnimation(animation);
        animationSet.setFillAfter(true);
        // v.setAnimation(animation);
        // animation.startNow();
        v.startAnimation(animationSet);
    }


    /**
     * 从控件所在位置移动到控件的顶部
     *
     * @return
     */
    public static TranslateAnimation moveToViewBottom() {
        TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                0.0f, Animation.RELATIVE_TO_SELF, -1.0f);
        mHiddenAction.setDuration(500);
        return mHiddenAction;
    }

    /**
     * 从控件的顶部移动到控件所在位置
     *
     * @return
     */
    public static TranslateAnimation moveToViewLocation() {
        TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        mHiddenAction.setDuration(500);
        return mHiddenAction;
    }

    /***
     *
     * 7、获取设备号方法组，共1个方法
     * 获取设备号
     * @param context 上下文对象
     * @return String 返回设备号
     */
    public static String getIMEI(Context context) {
        return ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    }
}
